webc 7.0.0-rc.2

WebContainer implementation for wapm.io
Documentation
A library for reading and writing WEBC files. The [`Container`] provides an abstraction over the various WEBC versions this crate can handle. As such, it tries to cater to the lowest common denominator and favors portability over performance or power. ```rust,no_run use webc::Container; let bytes: &[u8] = b"\0webc..."; let container = Container::from_bytes(bytes)?; println!("{:?}", container.manifest()); println!("Atoms:"); for (name, atom) in container.atoms() { let length = atom.len(); println!("{name}: {length} bytes"); } for (name, volume) in container.volumes() { let root_items = volume.read_dir("/").expect("The root directory always exists"); println!("{name}: {} items", root_items.len()); } # Ok::<(), Box>(()) ``` In general, errors that occur during lazy operations won't be accessible to the user. # Version-Specific Fallbacks If more flexibility is required, consider using [`crate::detect()`] and instantiating a compatible parser directly. ```rust,no_run use webc::{ Container, Version, }; # #[cfg(feature = "v1")] use webc::v1::{ParseOptions, WebC}; # #[cfg(feature = "v3")] use webc::v3::read::OwnedReader; let bytes: &[u8] = b"..."; match webc::detect(bytes) { # #[cfg(feature = "v1")] Ok(Version::V1) => { let options = ParseOptions::default(); let webc = WebC::parse(bytes, &options).unwrap(); if let Some(signature) = webc.signature { println!("Package signature: {:?}", signature); } } # #[cfg(feature = "v3")] Ok(Version::V3) => { let webc = OwnedReader::parse(bytes).unwrap(); let index = webc.index(); let signature = &index.signature; if !signature.is_none() { println!("Package signature: {signature:?}"); } } Ok(other) => todo!("Unsupported version, {other}"), Err(e) => todo!("An error occurred: {e}"), } ``` # Feature Flags